import * as storage from '../common/storage.js'
import { BASE_URL } from '../common/config'
import { myToast } from '../common/tools'

uni.addInterceptor('request', {
  invoke(args) {
    // request 触发前拼接 url args.url = 'https://www.example.com/'+args.url
    // console.error('interceptor-invoke', args)

    if(!args.header) {
      args.header = {}
    }
    const tokenInfo = storage.getTokenInfo()
    args.header['Authorization'] = tokenInfo ? tokenInfo.access_token : ''
  },
  success(args) {
    //console.log('interceptor-success',args)

    if(args.data && args.data.code !== 0) {
      myToast('错误:' + args.data.msg, 'error')
    }
  },
  fail(err) {
    console.error('interceptor-fail', err)
    myToast('错误:服务器异常', 'error')
  },
  complete(res) {
    //console.log('interceptor-complete',res)
  }
})

/**
 * get请求
 * @param {String} url 接口相对路径,必须以 / 开头
 * @param {Object} params get请求的参数
 */
export function get(url, params) {
  return new Promise(function(resolve, reject) {
    uni.request({
      url: BASE_URL + url,
      method: 'GET',
      data: params,
      success: function(res) {
        if(res.data && res.data.code === 0) {
          resolve(res.data)
        } else {
          //console.log('....',res.data)
          if(res.data.msg === '登录过期') {
            uni.reLaunch({
              url: '/pages/login/login'
            }).then()
          }
          reject(res.data)
        }
      },
      fail: function(err) {
        reject({ code: 500, msg: err })
      }
    })
  })
}

/**
 * POST请求
 * @param {String} url 接口相对路径,必须以 / 开头
 * @param {Object} data post请求的数据
 */
export function post(url, data) {
  return new Promise(function(resolve, reject) {
    uni.request({
      url: BASE_URL + url,
      method: 'POST',
      data: data,
      header: {
        'content-type': 'application/json'
      },
      success: function(res) {
        if(res.data && res.data.code === 0) {
          resolve(res.data)
        } else {
          reject(res.data)
        }
      },
      fail: function(err) {
        reject({ code: 500, msg: err })
      }
    })
  })
}

/**
 * POST请求
 * @param {String} url 接口相对路径,必须以 / 开头
 * @param {String} bodyKey 文件 martiple-part 的key 默认写files (具体看接口接收什么key)
 * @param {Object} data post请求的数据
 */
export function upload(url, bodyKey, data = {}) {
  return new Promise(function(resolve, reject) {
    uni.uploadFile({
      url: BASE_URL + url,
      filePath: data,
      name: bodyKey,
      success: function(res) {
        if(res.data && JSON.parse(res.data).code === 0) {
          resolve(res.data)
        } else {
          reject(res.data)
        }
      },
      fail: function(err) {
        reject({ code: 500, msg: err })
      }
    })
  })
}
